<?php

class MaestroComponent extends Component {

    public function __construct() {
        $this->TiendaLocal = ClassRegistry::init('TiendaLocal');
        $this->TipoMovimiento = ClassRegistry::init('TipoMovimiento');
        $this->Banco = ClassRegistry::init('Banco');
    }

    function modelo($config = 'punto', $modelo = null, $t = null) {
        if (empty($t))
            $t = 'punto_T001';
        App::import('Model', $modelo);
        $obj = new $modelo(false, null, null, $config, $t, $modelo);
        return $obj;
    }

   
    function listar_tienda_usuarios($tiendas=null) {
        $listaTiendas=null;
        $t=array();
        foreach ($tiendas as $data) {
            if ($data['UsuarioPunto']['punto_id'] == 0)
                $todas = 1;
            else
                $todas = 0;
            $t[] = $data['UsuarioPunto']['punto_id'];
        }
        $this->TiendaLocal->virtualFields['nombrecompleto'] = 'TiendaLocal.codigo || \'-\' || TiendaLocal.nombre';
        if (count($t) > 0){
            if($todas)
                $listaTiendas = $this->TiendaLocal->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('TiendaLocal.id >' => '0', 'TiendaLocal.estatus' => 1), 'order' => 'TiendaLocal.codigo'));
            else
                $listaTiendas = $this->TiendaLocal->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('TiendaLocal.id' => $t, 'TiendaLocal.estatus' => 1), 'order' => 'TiendaLocal.codigo'));
        }
        return $listaTiendas;
    }

    function listar_tienda_todas() {
        $this->TiendaLocal->virtualFields['nombrecompleto'] = 'TiendaLocal.codigo || \'-\' || TiendaLocal.nombre';
        $listaTiendas = $this->TiendaLocal->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('TiendaLocal.id >' => '0'), 'order' => 'TiendaLocal.codigo'));
        return $listaTiendas;
    }
    
    function listar_tienda() {
        $this->TiendaLocal->virtualFields['nombrecompleto'] = 'TiendaLocal.codigo || \'-\' || TiendaLocal.nombre';
        $listaTiendas = $this->TiendaLocal->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('TiendaLocal.estatus' => '1'), 'order' => 'TiendaLocal.codigo'));
        return $listaTiendas;
    }


		/**
		Permite ejecutar una sentencia sql variendo el identificador da la tienda, los parametros son
			* $sql_base = representa la sentencia sql a ser ejecutada
			* $ids_tienda = es un arrglo con los ID de las tiendas que se desean evaluar
			* $patron = es un string que permite indicar que segmento de la sentencia sql sera reemplazada por el ID de la Tienda a Evaluar
			* Retorna un array Multidimencional de la Siguiente Manera
				array( 
						id_tienda => array (Resultasdo de la Consulta SQL)
						id_tienda => array (Resultasdo de la Consulta SQL)
			  )
		*/
	public function sql_tiendas($sql_base,$ids_tienda,$patron='%tienda_id%'){
        $res_sql=array(); $datos=array();	
        for($i=0; $i<count($ids_tienda); $i++)
        {
            $sql=str_replace($patron,$ids_tienda[$i],$sql_base);
            $nuevo=$this->Banco->query($sql);
            $res_sql=null;
            for($z=0; $z<count($nuevo); $z++)
            {
                $res_sql[]=$nuevo[$z][0];
            }
            $datos[$ids_tienda[$i]]=$res_sql;
        }
        return $datos;
    }

    public function sql_puntos($sql_base,$ids_tienda,$patron='%tienda_id%'){
        $res_sql=array(); $datos=array();   
        for($i=0; $i<count($ids_tienda); $i++)
        {
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo','conditions' => array('TiendaLocal.id' => $ids_tienda[$i]))); 
            $ObjMovimientoDetalle = $this->modelo('punto','MovimientoDetalle', $BdPunto['TiendaLocal']['base_datos']);
            $sql=str_replace($patron,$ids_tienda[$i],$sql_base);
            $nuevo=$ObjMovimientoDetalle->query($sql);
            $res_sql=null;
            for($z=0; $z<count($nuevo); $z++)
            {
                $res_sql[]=$nuevo[$z][0];
            }
            $datos[$ids_tienda[$i]]=$res_sql;
        }
        return $datos;
    }

    function listar_tipo_movimiento() {
        
        $this->TipoMovimiento->virtualFields['nombrecompleto'] = '\' (\' || TipoMovimiento.codigo  || \') \' || TipoMovimiento.nombre';
        $listaTiendas = $this->TipoMovimiento->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('TipoMovimiento.id >' => '0', 'TipoMovimiento.estatus' => 1), 'order' => 'TipoMovimiento.codigo'));
        return $listaTiendas;
    }
           
}
/*
//////////////////////////////BASE DE DATOS PUNTOS ///////////////////////////////////
AGRGAR CAMPO tipo_movimiento_id en tabla movimiento_detalles

ALTER TABLE movimiento_detalles ADD COLUMN tipo_movimiento_id integer NOT NULL DEFAULT 0;
ALTER TABLE movimiento_detalles DROP CONSTRAINT detalle_movimientos_movimiento_id_fkey;
ALTER TABLE movimiento_detalles ADD CONSTRAINT detalle_movimientos_movimiento_id_fkey FOREIGN KEY (movimiento_id)
      REFERENCES movimientos (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE RESTRICT;

      ------------------------------------

-- Function: fnc_existencias_fecha(bigint, date, date)

-- DROP FUNCTION fnc_existencias_fecha(bigint, date, date);

CREATE OR REPLACE FUNCTION fnc_existencias_fecha(m_id bigint, fec_ini date, fec_fin date)
  RETURNS double precision AS
$BODY$
DECLARE
res double precision;
sql text;
BEGIN
    SELECT COALESCE(sum(md.cantidad),0) as total FROM movimiento_detalles md, movimientos m 
    WHERE md.material_id=m_id AND md.movimiento_id=m.id AND m.fecha_movimiento BETWEEN fec_ini and fec_fin INTO res;

return res;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION fnc_existencias_fecha(bigint, date, date)
  OWNER TO admin;

select fnc_existencias_fecha(1453,now()::date,now()::date)



//////////////////////////////////////////////////////////////////////////
*/
?>